Removed has_cursor, set the cursor beginning of Text when creating the
authorOwen Taylor <otaylor@redhat.com>
Tue, 11 Aug 1998 19:06:18 +0000 (19:06 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Tue, 11 Aug 1998 19:06:18 +0000 (19:06 +0000)
Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>

* gtk/gtktext.[ch]: Removed has_cursor, set the cursor
  beginning of Text when creating the Text widget.

* gtk/testgtk.c: Grab the focus on the text widget so
  as to test out the above.

Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>

* gtk/gtkeditable.c: Reverted part of timj's change of Jul 16.
  ::changed is a notification signal and should have no default
  handler. A complete redraw of the Text widget does _not_ need to
  be done on every text insertion.

Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
(gtk-abilleira-072198-patch)

* gtk/gtkwindow.[ch]:
  Add gtk_window_set_modal() which sets a flag; when
  set the window does a gtk_grab_add() when the window
  is shown, and a gtk_grab_remove() when the window
  is hidden.

* gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
  that case will run "Create Dir","Delete File" and "Rename File"
  dialogs as modal too.

* gtk/testgtk.c: Added a button with an example of creating modal
  dialog boxes. Including file selection and color selection standard
  dialogs.

Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>

* gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
  Removed CAN_FOCUS by default from scrollbars, button
  children of toolbar. (But not GDK_TOOLBAR_CHILD_WIDGET children)
  (Scrollbar definitely good change, toolbar bit more questionable)

17 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkeditable.c
gtk/gtkfilesel.c
gtk/gtkhscrollbar.c
gtk/gtktext.c
gtk/gtktext.h
gtk/gtkvscrollbar.c
gtk/gtkwindow.c
gtk/gtkwindow.h
gtk/testgtk.c
tests/testgtk.c

index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index 6f982cbee4fceb390772fdd0de784a6611f52eb6..866637bf5d35f627dc17f9a75e480bd8b75e7e74 100644 (file)
@@ -1,3 +1,42 @@
+Tue Aug 11 15:04:52 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtktext.[ch]: Removed has_cursor, set the cursor
+         beginning of Text when creating the Text widget.
+
+       * gtk/testgtk.c: Grab the focus on the text widget so
+         as to test out the above.
+
+Tue Aug 11 14:55:00 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkeditable.c: Reverted part of timj's change of Jul 16. 
+         ::changed is a notification signal and should have no default
+         handler. A complete redraw of the Text widget does _not_ need to
+         be done on every text insertion.
+
+Tue Aug 11 13:07:29 1998  Owen Taylor  <otaylor@redhat.com>
+       (gtk-abilleira-072198-patch)
+
+       * gtk/gtkwindow.[ch]: 
+         Add gtk_window_set_modal() which sets a flag; when
+         set the window does a gtk_grab_add() when the window
+         is shown, and a gtk_grab_remove() when the window
+         is hidden. 
+
+       * gtk/gtkfilesel.[ch]: Test if it is running in modal form and in
+         that case will run "Create Dir","Delete File" and "Rename File" 
+         dialogs as modal too.
+
+       * gtk/testgtk.c: Added a button with an example of creating modal 
+         dialog boxes. Including file selection and color selection standard
+         dialogs.
+       
+Tue Aug 11 00:44:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkhscrollbar.c gtk/gtkvscrollbar.c gtk/gtktoolbar.c:
+         Removed CAN_FOCUS by default from scrollbars, button
+         children of toolbar. (But not GTK_TOOLBAR_CHILD_WIDGET children)
+         (Scrollbar definitely good change, toolbar bit more questionable)
+
 Tue Aug 11 17:49:33 1998  Tim Janik  <timj@gtk.org>
 
        * examples/packbox/packbox.c: #include fixes (reported by Asbjoern
index b7e8c18ef48fde4c0de97e79c9e31a5942782ff5..d2ff41437c383d8ea4f6b921bb10a5de61b5b8cf 100644 (file)
@@ -290,7 +290,6 @@ gtk_editable_class_init (GtkEditableClass *class)
 
   class->insert_text = NULL;
   class->delete_text = NULL;
-  class->changed = (void (*) (GtkEditable*)) gtk_widget_queue_draw;
 
   class->activate = NULL;
   class->set_editable = gtk_editable_real_set_editable;
index 9ee6ea9f7c6c00c8480acbdbff437bcfa935b57b..f8903fbea898cec3f8fbb68ae52a12c6c592c60b 100644 (file)
@@ -772,8 +772,12 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
                      (gpointer) fs);
   gtk_window_set_title (GTK_WINDOW (dialog), "Create Directory");
   gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
-  gtk_widget_show (dialog);
-  
+
+  /* If file dialog is grabbed, grab option dialog */
+  /* When option dialog is closed, file dialog will be grabbed again */
+  if (GTK_WINDOW(fs)->modal)
+      gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+
   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_border_width(GTK_CONTAINER(vbox), 8);
   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox,
@@ -811,6 +815,8 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
   GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
   gtk_widget_grab_default(button);
   gtk_widget_show (button);
+
+  gtk_widget_show (dialog);
 }
 
 static void
@@ -871,6 +877,11 @@ gtk_file_selection_delete_file (GtkWidget *widget, gpointer data)
                      (gpointer) fs);
   gtk_window_set_title (GTK_WINDOW (dialog), "Delete File");
   gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+
+  /* If file dialog is grabbed, grab option dialog */
+  /* When option dialog is closed, file dialog will be grabbed again */
+  if (GTK_WINDOW(fs)->modal)
+      gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
   
   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_border_width(GTK_CONTAINER(vbox), 8);
@@ -906,6 +917,7 @@ gtk_file_selection_delete_file (GtkWidget *widget, gpointer data)
   gtk_widget_show (button);
 
   gtk_widget_show (dialog);
+
 }
 
 static void
@@ -969,7 +981,11 @@ gtk_file_selection_rename_file (GtkWidget *widget, gpointer data)
                      (gpointer) fs);
   gtk_window_set_title (GTK_WINDOW (dialog), "Rename File");
   gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
-  gtk_widget_show (dialog);
+
+  /* If file dialog is grabbed, grab option dialog */
+  /* When option dialog  closed, file dialog will be grabbed again */
+  if (GTK_WINDOW(fs)->modal)
+    gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
   
   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_border_width(GTK_CONTAINER(vbox), 8);
@@ -1014,6 +1030,8 @@ gtk_file_selection_rename_file (GtkWidget *widget, gpointer data)
   GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
   gtk_widget_grab_default(button);
   gtk_widget_show (button);
+
+  gtk_widget_show (dialog);
 }
 
 
index 75068c338baec656fdcfc50850ab5890ade9a7f7..c8c1bbc9b5fa2a47088ae8d150851cf1b6a2b5b4 100644 (file)
@@ -93,7 +93,6 @@ gtk_hscrollbar_init (GtkHScrollbar *hscrollbar)
   GtkRequisition *requisition;
 
   widget = GTK_WIDGET (hscrollbar);
-  GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
   requisition = &widget->requisition;
 
   requisition->width = (RANGE_CLASS (widget)->min_slider_size +
index b1c04fab20467eb9769d9caec28c42c6340d4d46..e7255138734b0ed64f1efceaee178100039cb392 100644 (file)
@@ -543,6 +543,8 @@ gtk_text_init (GtkText *text)
   text->tab_stops = g_list_prepend (text->tab_stops, (void*)8);
   text->tab_stops = g_list_prepend (text->tab_stops, (void*)8);
 
+  text->line_start_cache = NULL;
+
   text->line_wrap = TRUE;
   text->word_wrap = FALSE;
   
@@ -561,6 +563,7 @@ gtk_text_new (GtkAdjustment *hadj,
   text = gtk_type_new (GTK_TYPE_TEXT);
 
   gtk_text_set_adjustments (text, hadj, vadj);
+  gtk_editable_set_position (GTK_EDITABLE (text), 0);
 
   return GTK_WIDGET (text);
 }
@@ -902,11 +905,10 @@ gtk_text_set_position (GtkEditable *editable,
 {
   GtkText *text = (GtkText *) editable;
 
-  undraw_cursor( text, FALSE );
-  text->has_cursor = 1;
-  text->cursor_mark = find_mark( text, position );
-  find_cursor( text, TRUE );
-  draw_cursor( text, FALSE );
+  undraw_cursor (text, FALSE);
+  text->cursor_mark = find_mark (text, position);
+  find_cursor (text, TRUE);
+  draw_cursor (text, FALSE);
   gtk_editable_select_region (editable, 0, 0);
 }
 
@@ -1753,7 +1755,7 @@ gtk_text_key_press (GtkWidget   *widget,
   key = event->keyval;
   return_val = TRUE;
 
-  if ((GTK_EDITABLE(text)->editable == FALSE) || !text->has_cursor)
+  if ((GTK_EDITABLE(text)->editable == FALSE))
     {
       switch (event->keyval)
        {
@@ -3324,17 +3326,17 @@ find_cursor_at_line (GtkText* text, const LineParams* start_line, gint pixel_hei
 static void
 find_cursor (GtkText* text, gboolean scroll)
 {
-  if (!text->has_cursor)
-    return;
-
-  find_line_containing_point (text, text->cursor_mark.index, scroll);
+  if (GTK_WIDGET_REALIZED (text))
+    {
+      find_line_containing_point (text, text->cursor_mark.index, scroll);
 
-  g_assert (text->cursor_mark.index >= text->first_line_start_index);
+      g_assert (text->cursor_mark.index >= text->first_line_start_index);
 
-  if (text->current_line)
-    find_cursor_at_line (text,
-                        &CACHE_DATA(text->current_line),
-                        pixel_height_of(text, text->current_line));
+      if (text->current_line)
+       find_cursor_at_line (text,
+                            &CACHE_DATA(text->current_line),
+                            pixel_height_of(text, text->current_line));
+    }
 
   GTK_EDITABLE (text)->current_pos = text->cursor_mark.index;
 }
@@ -3392,8 +3394,6 @@ find_mouse_cursor (GtkText* text, gint x, gint y)
   
   pixel_height = - text->first_cut_pixels;
   
-  text->has_cursor = 1;
-  
   for (; cache; cache = cache->next)
     {
       pixel_height += LINE_HEIGHT(CACHE_DATA(cache));
@@ -3500,12 +3500,6 @@ move_cursor_ver (GtkText *text, int count)
   GtkPropertyMark mark;
   gint offset;
 
-  if (!text->has_cursor)
-    {
-      scroll_int (text, count * KEY_SCROLL_PIXELS);
-      return;
-    }
-
   mark = find_this_line_start_mark (text, text->cursor_mark.index, &text->cursor_mark);
   offset = text->cursor_mark.index - mark.index;
 
@@ -3550,9 +3544,6 @@ static void
 move_cursor_hor (GtkText *text, int count)
 {
   /* count should be +-1. */
-  if (!text->has_cursor)
-    return;
-
   if ( (count > 0 && text->cursor_mark.index + count > TEXT_LENGTH(text)) ||
        (count < 0 && text->cursor_mark.index < (- count)) ||
        (count == 0) )
@@ -4629,7 +4620,6 @@ undraw_cursor (GtkText* text, gint absolute)
     text->cursor_drawn_level = 0;
 
   if ((text->cursor_drawn_level ++ == 0) &&
-      text->has_cursor && 
       (editable->selection_start_pos == editable->selection_end_pos) &&
       GTK_WIDGET_DRAWABLE (text))
     {
@@ -4678,35 +4668,25 @@ undraw_cursor (GtkText* text, gint absolute)
 static gint
 drawn_cursor_min (GtkText* text)
 {
-  if (text->has_cursor)
-    {
-      GdkFont* font;
-
-      g_assert(text->cursor_mark.property);
-
-      font = MARK_CURRENT_FONT(&text->cursor_mark);
-
-      return text->cursor_pos_y - text->cursor_char_offset - font->ascent;
-    }
-  else
-    return 0;
+  GdkFont* font;
+  
+  g_assert(text->cursor_mark.property);
+  
+  font = MARK_CURRENT_FONT(&text->cursor_mark);
+  
+  return text->cursor_pos_y - text->cursor_char_offset - font->ascent;
 }
 
 static gint
 drawn_cursor_max (GtkText* text)
 {
-  if (text->has_cursor)
-    {
-      GdkFont* font;
-
-      g_assert(text->cursor_mark.property);
-
-      font = MARK_CURRENT_FONT(&text->cursor_mark);
-
-      return text->cursor_pos_y - text->cursor_char_offset;
-    }
-  else
-    return 0;
+  GdkFont* font;
+  
+  g_assert(text->cursor_mark.property);
+  
+  font = MARK_CURRENT_FONT(&text->cursor_mark);
+  
+  return text->cursor_pos_y - text->cursor_char_offset;
 }
 
 static void
@@ -4720,7 +4700,6 @@ draw_cursor (GtkText* text, gint absolute)
     text->cursor_drawn_level = 1;
 
   if ((--text->cursor_drawn_level == 0) &&
-      text->has_cursor && 
       editable->editable &&
       (editable->selection_start_pos == editable->selection_end_pos) &&
       GTK_WIDGET_DRAWABLE (text))
@@ -4811,7 +4790,7 @@ expose_text (GtkText* text, GdkRectangle *area, gboolean cursor)
            draw_line_wrap (text, pixels + CACHE_DATA(cache).font_ascent);
        }
 
-      if (cursor && text->has_cursor && GTK_WIDGET_HAS_FOCUS (text))
+      if (cursor && GTK_WIDGET_HAS_FOCUS (text))
        {
          if (CACHE_DATA(cache).start.index <= text->cursor_mark.index &&
              CACHE_DATA(cache).end.index >= text->cursor_mark.index)
index 6932cc15c742f29065bbcb17be24a04b05c29a03..1de2de945a15a78c3a5a6404b4ccf67268df8c60 100644 (file)
@@ -100,8 +100,6 @@ struct _GtkText
 
                             /* FLAGS */
 
-  /* True iff the cursor has been placed yet. */
-  guint has_cursor : 1;
   /* True iff this buffer is wrapping lines, otherwise it is using a
    * horizontal scrollbar. */
   guint line_wrap : 1;
index 52ab2d25efbafbcdabf6cc2199ecbac6f20e199b..c8b960a3193a57a5c84d40e5ac591e0b95510441 100644 (file)
@@ -92,7 +92,6 @@ gtk_vscrollbar_init (GtkVScrollbar *vscrollbar)
   GtkRequisition *requisition;
 
   widget = GTK_WIDGET (vscrollbar);
-  GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
   requisition = &widget->requisition;
 
   requisition->width = (RANGE_CLASS (widget)->slider_width +
index fd5ba6c53a3f117877377d0647c10637668a070f..bf269320912090038969e675dd20582ff19815bb 100644 (file)
@@ -26,6 +26,7 @@
 #include "gtksignal.h"
 #include "gtkwindow.h"
 #include "gtkbindings.h"
+#include "gtkmain.h"
 
 enum {
   SET_FOCUS,
@@ -199,6 +200,7 @@ gtk_window_init (GtkWindow *window)
   window->handling_resize = FALSE;
   window->position = GTK_WIN_POS_NONE;
   window->use_uposition = TRUE;
+  window->modal = FALSE;
   
   gtk_container_register_toplevel (GTK_CONTAINER (window));
 }
@@ -433,6 +435,24 @@ gtk_window_activate_default (GtkWindow      *window)
   return FALSE;
 }
 
+void
+gtk_window_set_modal (GtkWindow *window, gboolean modal)
+{
+  g_return_if_fail (window != NULL);
+  g_return_if_fail (GTK_IS_WINDOW (window));
+
+  /* If the widget was showed already, adjust it's grab state */
+  if (GTK_WIDGET_VISIBLE(GTK_WIDGET(window)))
+    {
+      if (window->modal && !modal)
+       gtk_grab_remove (GTK_WIDGET(window));
+      else if (!window->modal && modal)
+       gtk_grab_add (GTK_WIDGET(window));
+    }
+  
+  window->modal = modal;
+}
+
 static void
 gtk_window_shutdown (GtkObject *object)
 {
@@ -485,6 +505,10 @@ gtk_window_show (GtkWidget *widget)
   GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);
   gtk_container_check_resize (GTK_CONTAINER (widget));
   gtk_widget_map (widget);
+
+  if (GTK_WINDOW(widget)->modal)
+      gtk_grab_add(widget);
+      
 }
 
 static void
@@ -495,6 +519,10 @@ gtk_window_hide (GtkWidget *widget)
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_VISIBLE);
   gtk_widget_unmap (widget);
+
+  if (GTK_WINDOW(widget)->modal)
+      gtk_grab_remove(widget);
+
 }
 
 static void
index ce73469f58754b95eb2937cfd1125a09d02664f2..ee35c9a9c35e1d91fe2ec5b2f4380e0908b19d42 100644 (file)
@@ -61,6 +61,7 @@ struct _GtkWindow
   guint handling_resize : 1;
   guint position : 2;
   guint use_uposition : 1;
+  guint modal : 1;
 };
 
 struct _GtkWindowClass
@@ -96,7 +97,9 @@ void       gtk_window_position                 (GtkWindow           *window,
 gint      gtk_window_activate_focus           (GtkWindow           *window);
 gint      gtk_window_activate_default         (GtkWindow           *window);
 
-
+/* If window is set modal, input will be grabbed when show and released when hide */
+void       gtk_window_set_modal                (GtkWindow           *window,
+                                                gboolean modal);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 6658a342ed2cef959ad2cbb97c81f653adc47bfe..dec2fa2d9b2d0eab8debbb02cfef897b24e387eb 100644 (file)
@@ -2138,6 +2138,127 @@ scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
     }
 }
 
+/*
+ create_modal_window
+ */
+
+static gboolean
+cmw_destroy_cb(GtkWidget *widget)
+{
+  /* This is needed to get out of gtk_main */
+  gtk_main_quit ();
+
+  return FALSE;
+}
+
+static void
+cmw_color (GtkWidget *widget)
+{
+    GtkWidget *csd;
+
+    csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
+
+    /* Set as modal */
+    gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
+    
+    gtk_signal_connect (GTK_OBJECT(csd), "destroy",
+                       GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
+
+    gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
+                               "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (csd));
+    gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
+                               "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (csd));
+    
+    /* wait until destroy calls gtk_main_quit */
+    gtk_widget_show (csd);    
+    gtk_main ();
+}
+
+static void
+cmw_file (GtkWidget *widget)
+{
+    GtkWidget *fs;
+
+    fs = gtk_file_selection_new("This is a modal file selection dialog");
+
+    /* Set as modal */
+    gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
+
+    gtk_signal_connect (GTK_OBJECT(fs), "destroy",
+                        GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
+
+    gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
+                               "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (fs));
+    gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
+                               "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (fs));
+    
+    /* wait until destroy calls gtk_main_quit */
+    gtk_widget_show (fs);
+    
+    gtk_main();
+}
+
+
+static void
+create_modal_window (void)
+{
+  GtkWidget *window = NULL;
+  GtkWidget *box1,*box2;
+  GtkWidget *frame1;
+  GtkWidget *btnColor,*btnFile,*btnClose;
+
+  /* Create modal window (Here you can use any window descendent )*/
+  window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
+
+  /* Set window as modal */
+  gtk_window_set_modal (GTK_WINDOW(window),TRUE);
+
+  /* Create widgets */
+  box1 = gtk_vbox_new (FALSE,5);
+   frame1 = gtk_frame_new ("Standard dialogs in modal form");
+    box2 = gtk_vbox_new (TRUE,5);
+     btnColor = gtk_button_new_with_label ("Color");
+     btnFile = gtk_button_new_with_label ("File Selection");
+     btnClose = gtk_button_new_with_label ("Close");
+
+  /* Init widgets */
+  gtk_container_border_width (GTK_CONTAINER(box1),3);
+  gtk_container_border_width (GTK_CONTAINER(box2),3);
+    
+  /* Pack widgets */
+  gtk_container_add (GTK_CONTAINER (window), box1);
+   gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
+    gtk_container_add (GTK_CONTAINER (frame1), box2);
+     gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
+     gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
+   gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
+   gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
+   
+  /* connect signals */
+  gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
+                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                             GTK_OBJECT (window));
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
+  
+  gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
+                      GTK_SIGNAL_FUNC (cmw_color),NULL);
+  gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
+                      GTK_SIGNAL_FUNC (cmw_file),NULL);
+
+  /* Show widgets */
+  gtk_widget_show_all (window);
+
+  /* wait until dialog get destroyed */
+  gtk_main();
+}
+
 /*
  * GtkScrolledWindow
  */
@@ -4865,6 +4986,7 @@ create_text (void)
       gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
                        GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                        GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+      gtk_widget_grab_focus (text);
       gtk_widget_show (text);
 
       hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
@@ -7171,6 +7293,7 @@ create_main_window (void)
       { "handle box", create_handle_box },
       { "list", create_list },
       { "menus", create_menus },
+      { "modal window", create_modal_window },
       { "notebook", create_notebook },
       { "panes", create_panes },
       { "pixmap", create_pixmap },
index 6658a342ed2cef959ad2cbb97c81f653adc47bfe..dec2fa2d9b2d0eab8debbb02cfef897b24e387eb 100644 (file)
@@ -2138,6 +2138,127 @@ scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
     }
 }
 
+/*
+ create_modal_window
+ */
+
+static gboolean
+cmw_destroy_cb(GtkWidget *widget)
+{
+  /* This is needed to get out of gtk_main */
+  gtk_main_quit ();
+
+  return FALSE;
+}
+
+static void
+cmw_color (GtkWidget *widget)
+{
+    GtkWidget *csd;
+
+    csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
+
+    /* Set as modal */
+    gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
+    
+    gtk_signal_connect (GTK_OBJECT(csd), "destroy",
+                       GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
+
+    gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
+                               "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (csd));
+    gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
+                               "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (csd));
+    
+    /* wait until destroy calls gtk_main_quit */
+    gtk_widget_show (csd);    
+    gtk_main ();
+}
+
+static void
+cmw_file (GtkWidget *widget)
+{
+    GtkWidget *fs;
+
+    fs = gtk_file_selection_new("This is a modal file selection dialog");
+
+    /* Set as modal */
+    gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
+
+    gtk_signal_connect (GTK_OBJECT(fs), "destroy",
+                        GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
+
+    gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
+                               "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (fs));
+    gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
+                               "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                               GTK_OBJECT (fs));
+    
+    /* wait until destroy calls gtk_main_quit */
+    gtk_widget_show (fs);
+    
+    gtk_main();
+}
+
+
+static void
+create_modal_window (void)
+{
+  GtkWidget *window = NULL;
+  GtkWidget *box1,*box2;
+  GtkWidget *frame1;
+  GtkWidget *btnColor,*btnFile,*btnClose;
+
+  /* Create modal window (Here you can use any window descendent )*/
+  window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
+
+  /* Set window as modal */
+  gtk_window_set_modal (GTK_WINDOW(window),TRUE);
+
+  /* Create widgets */
+  box1 = gtk_vbox_new (FALSE,5);
+   frame1 = gtk_frame_new ("Standard dialogs in modal form");
+    box2 = gtk_vbox_new (TRUE,5);
+     btnColor = gtk_button_new_with_label ("Color");
+     btnFile = gtk_button_new_with_label ("File Selection");
+     btnClose = gtk_button_new_with_label ("Close");
+
+  /* Init widgets */
+  gtk_container_border_width (GTK_CONTAINER(box1),3);
+  gtk_container_border_width (GTK_CONTAINER(box2),3);
+    
+  /* Pack widgets */
+  gtk_container_add (GTK_CONTAINER (window), box1);
+   gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
+    gtk_container_add (GTK_CONTAINER (frame1), box2);
+     gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
+     gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
+   gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
+   gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
+   
+  /* connect signals */
+  gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
+                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                             GTK_OBJECT (window));
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
+  
+  gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
+                      GTK_SIGNAL_FUNC (cmw_color),NULL);
+  gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
+                      GTK_SIGNAL_FUNC (cmw_file),NULL);
+
+  /* Show widgets */
+  gtk_widget_show_all (window);
+
+  /* wait until dialog get destroyed */
+  gtk_main();
+}
+
 /*
  * GtkScrolledWindow
  */
@@ -4865,6 +4986,7 @@ create_text (void)
       gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
                        GTK_EXPAND | GTK_SHRINK | GTK_FILL,
                        GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+      gtk_widget_grab_focus (text);
       gtk_widget_show (text);
 
       hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
@@ -7171,6 +7293,7 @@ create_main_window (void)
       { "handle box", create_handle_box },
       { "list", create_list },
       { "menus", create_menus },
+      { "modal window", create_modal_window },
       { "notebook", create_notebook },
       { "panes", create_panes },
       { "pixmap", create_pixmap },